package com.cqupt.service;

import com.cqupt.pojo.Host;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author ：
 * @date ：Created in 2020/11/25 9:05
 * @description：
 * @modified By：
 */
public interface MonitorService {
    /**
     * 根据hostid获取snmp设备的cpu利用和内存利用率
     * @param hostid
     * @return
     */
    Map<String, Object> getSnmpCpuAndMemryByHostid(String hostid);

    /**
     *
     * @description: 获取被监控设备列表
     * @param:
     * @return:
     * @author:
     * @time:
     */
//    List<Map<String, Object>> getHostList(Integer pageNo, Integer pageSize, String status);
//    List<Map<String, Object>> getHostList(Integer pageNo, Integer pageSize, String status,Integer hostType);


    /**
     *
     * @description: 分类获取被监控设备列表(可用/不可用筛选)
     * @param:
     * @return:
     * @author:
     * @time:
     */
    List<Map<String,    Object>> getHostListAvailClassify(Integer pageNo, Integer pageSize, String status,Integer hostType);
//    /**
//     *
//     * @description: 获取被监控设备列表(正确判断可用性和状态间关系)
//     * @param:
//     * @return:
//     * @author:
//     * @time:
//     */
    List<Map<String, Object>> getHostListLogic(Integer pageNo, Integer pageSize, String status, Integer hostType);

    /**
     *
     * @description: 获取被监控设备 可用性 列表(包括可用和无状态)
     * @param:
     * @return:
     * @author:
     * @time:
     */
    List<Map<String, Object>> getAvailableHostList(Integer pageNo, Integer pageSize, String status);
    List<Map<String, Object>> getAvailableHostList();

    /**
     *
     * @description: 获取被监控设备 不可用性 列表
     * @param:
     * @return:
     * @author:
     * @time:
     */
    List<Map<String, Object>> getUnAvailableHostList(Integer pageNo, Integer pageSize, String status);
    List<Map<String, Object>> getUnAvailableHostList();
    /**
     *
     * @description: 获取被监控设备总数
     * @param:
     * @return:
     * @author:
     * @time:
     * @param status
     */
//    Integer getHostCount(Integer status);
    Integer getHostCountByStatus(String status);


    /**
     *
     * @description: 根据hostId获取监控项
     * @param:
     * @return:
     * @author:s
     * @time:
     */
    List<Map<String, Object>> getItemByHostId(String hostId);

    /**
     * @description 根据hostId获取应用集
     * @param:
     * @return:
     * @author
     * @date:
     */
    List<Map<String, Object>> getApplicationByHostId(String hostId);

    /**
     * @description: 根据application获得监控项
     * @param:
     * @return:
     * @author
     * @date:
     */
    List<Map<String, Object>> getItemByApplication(List<Map<String, Object>> applicationList, String hostId);

    /**
     * @description:  根据itemId获取历史数据
     * @param:
     * @return:
     * @author
     * @date:
     */
    List<Map<String, Object>> getNetOfSnmpByName(String hostId, String itemName);

//    /**
//     *
//     * @description:  高负载设备列表
//     * @param:
//     * @return:
//     * @author:
//     * @time:
//     */
//    List<Map<String, Object>> getHighLoadHostList(String sortfield);


    /**
     * @description: 获取zabbix类型设备的流量数据
     * @param:
     * @return:
     * @author
     * @date:
     */
    List<Map<String, Object>> getNetData(String hostId);

    /**
     * @description: 获取snmp设备的流量相关的接口
     * @param:
     * @return:
     * @author
     * @date:
     */
    List<Map<String, Object>> getInterfaceOfSnmpByHostId(String hostId);

    /**
     * @description: 根据hostid查询日志监控项（名称）
     * @author
     * @date
     * @version
     */
    List<Map<String, String>> getLogItemId(String hostId);

    /**
     * @description: 根据监控项id查询对应的日志历史数据
     * @author
     * @date
     * @version
     */
    List<Map<String, Object>> getLogHistoryDataByItemId(String itemId, String startTime, String endTime, String currentPage);

    /**
     *
     * @description: 获取指定主机占用资源前5的进程
     * @param:
     * @return:
     * @author:
     * @time:
     */
    List<Map<String, Object>> getCpuUsageByProcess(String hostIp, String hostId);
//    List<Map<String, Object>> getCpuUsageByProcess(String hostIp, String userName, String password);

    /**
     *
     * @description: 获取 可用性主机数量
     * @param:
     * @return:
     * @author:
     * @time:
     */
    Integer getHostCountByAvail();

    /**
     *
     * @description: 获取 不可可用性主机数量
     * @param:
     * @return:
     * @author:
     * @time:
     */
    Integer getHostCountByUnAvail();


    /**
     * @description: 根据监控项名获取监控项
     *  （硬件信息）
     */
    List<Map<String, Object>> getItemByName(String[] itemsName, String hostId);


    /**
     * 获得 该类型下的设备数量 0为服务器 1为网络设备
     * @param hostType
     * @return
     */
    Integer getHostCountByType(Integer hostType);
    /**
     * @description: 根据主机类型进行可用/不可用分类
     *
     */
    Integer getHostCountByTypeAndStatus(Integer hostType,String status);

    /**
     * 通过主机hostid(不止一个)获得主机接口信息
     * @param hostIds
     * @return
     */
    List<Map<String, Object>> getHostInterfaceListByHostIds(List<String> hostIds);

    /**
     * 根据用户id获得登录的主机名和密码
     * @param hostId
     * @return
     */
    Map<String,Object> getusernamepwdbyHostid(String hostId);

    //优化后的高负载
    List<Map<String, Object>> getHighLoadHostList_new(String sortfield);

    //测试接口1
    List<Map<String,Object>> sortList(List<Map<String,Object>> data ,String sortfield);

    //测试接口2
    List<Map<String,Object>> filterItemdata_new(List<Map<String, Object>>  resultList);


    // 优化后的设备监控
    List<Map<String, Object>> getHostList_new(Integer pageNo, Integer pageSize, String status, Integer hostType);
    List<Map<String, Object>> getHostList_new(Integer pageNo, Integer pageSize, String status);

    //测试接口3
    List<Map<String,Object>> filterItemdata_highload_new(List<Map<String, Object>>  resultList);

    // 主页面高负载请求
    List<Map<String, Object>> getHighLoadHostList_dashboard_new(String sortfield);

    // cpu数据过滤器
    List<Map<String,Object>> filterItemdata_cpu_new(List<Map<String, Object>>  resultList);
    // 内存数据过滤器
    List<Map<String,Object>> filterItemdata_memory_new(List<Map<String, Object>>  resultList);


    //各个监控项数据导出
    Boolean ExportData(String status,Integer hostType);

    //获得监控项的信息
    List<Map<String,Object>> getItemDataInfo(String hostids,String status,Integer hostType);

    //通过监控项id获得趋势
    Map<String,Object> getTrendByItemid(String itemid);

    //获得服务器监控项的信息
    Boolean getItem_by_DataInfo(String hostids,String status,Integer hostType);

    //通过hostid和key查找item信息
    Map<String,Object> getItemByHostidAndKey(String hostid,String key);
    //   修改后的网络接口
    Map<String, Object> getNetData_new(String hostId);
    // 根据监控项id数组获取最新数据
    List<Map<String, Object>> getNewNetDataByItems(ArrayList<String> itemIds);
    // 更新hostid网络接口监控项原型的延迟事件为1s(为请求实时数据)
    boolean setDelayAs(String hostId, String delay);
    // 修改后的SNMP网络接口
    Map<String, Object> getNetOfSnmpByName_new(String hostId, String itemName);
    // 根据hostid获取agent类型
    int getAgentTypeByHostid(String hostId);

    // 通过主机hostid获得监控项信息
    int getItemsByHostID(String hostid);

    // 获得当前可用的设备
    List<Map<String, Object>> getAvailAllOnlineHost();
    // 高负载增加磁盘接口 2022.05.25需求
    List<List<String>> getHighLoadHostList_cpu_mem_disk(String name);
}
